package com.ybbase.framework.common.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.ybbase.framework.base.model.Json2ListBean;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author cg
 * @date 2019-08-21 14:29
 Json转换数据饮用类
*/
public class JsonStrToMapOrList<T> {
 
    /**
     * json字符串转Map
     * @author cg
     * @date 2019-08-21 10:27
     * @param jsonStr 传入的字符串
     * @return
     * @throws Exception
     * @since
    */
    public static Map<String, Object> jsonStr2Map(String jsonStr) throws Exception {
        Map<String, Object> map = new HashMap<String, Object>();
        if (!jsonStr.isEmpty()) {
            map = (Map)JSON.parse(jsonStr);
        }
        return map;
    }
    /**
     * json字符串转List
     * @author cg
     * @date 2019-08-21 11:32
     * @param jsonStr 传入的字符串
     * @return
     * @throws Exception
     * @since
    */
    public static List<Json2ListBean> json2List(String jsonStr)throws Exception {
        List<Json2ListBean> list = new ArrayList<>();
        if (!jsonStr.isEmpty()) {
            Map<String, Object> maps = jsonStr2Map(jsonStr);
            for(Map.Entry<String,Object> map:maps.entrySet()){
                Json2ListBean json2ListBean = new Json2ListBean(map.getKey(),map.getValue()+"");
                list.add(json2ListBean);
            }
        }
        return list;
    }
    /**
     * 根据提供的Class类型和json字符串获取T对象
     * @author cg
     * @date 2019-08-21 14:27
     * @param jsonStr 传入的字符串
     * @param c 泛型Class对象
     * @return
     * @throws Exception
     * @since
    */
    public T json2Object(String jsonStr,Class<T> c) throws Exception{
        JSONObject json = JSONObject.parseObject(jsonStr);
        T t = JSON.toJavaObject(json,c);
        return t;
    }

    /**
     * 根据json字符串转换为List<Object>
     * @author cg
     * @date 2019-08-21 11:43
     * @param jsonStr  传入的字符串
     * @return
     * @throws Exception
     * @since
    */
    public List<T> json2ListObject(String jsonStr) throws Exception{
        List<T> list = JSON.parseObject(jsonStr,new TypeReference<List<T>>(){});
        return list;
    }


}